www.gusucode.com > VC++网络版的打字软件源程序-源码程序 > VC++网络版的打字软件源程序-源码程序\code\TypeSrv V2.0\QuestionDlg.cpp

    //Download by http://www.NewXing.com
// QuestionDlg.cpp : implementation file
//

#include "stdafx.h"
#include "typesrv.h"
#include "QuestionDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define MAX_QUESTION_LEN		65525		//试题最大字节数

/////////////////////////////////////////////////////////////////////////////
// CQuestionDlg dialog


CQuestionDlg::CQuestionDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CQuestionDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CQuestionDlg)
	m_strQuestionInfo = _T("");
	m_strQuestion = _T("");
	//}}AFX_DATA_INIT
	m_pSet=NULL;
}


void CQuestionDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CQuestionDlg)
	DDX_Control(pDX, IDC_INFO, m_CtrlInfo);
	DDX_Control(pDX, IDC_TEXT, m_CtrlQuestion);
	DDX_Control(pDX, IDC_FLAG, m_CtrlFlag);
	DDX_Control(pDX, IDC_BTN_SAVE, m_SaveBtn);
	DDX_Control(pDX, IDC_BTN_EDIT, m_EditBtn);
	DDX_Control(pDX, IDC_BTN_DELETE, m_DeleteBtn);
	DDX_Control(pDX, IDC_BTN_CANCEL, m_CancelBtn);
	DDX_Control(pDX, IDC_BTN_ADD, m_AddBtn);
	DDX_Text(pDX, IDC_INFO, m_strQuestionInfo);
	DDX_Text(pDX, IDC_TEXT, m_strQuestion);
	DDV_MaxChars(pDX, m_strQuestion, 65525);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CQuestionDlg, CDialog)
	//{{AFX_MSG_MAP(CQuestionDlg)
	ON_BN_CLICKED(IDC_BTN_ADD, OnBtnAdd)
	ON_BN_CLICKED(IDC_BTN_SAVE, OnBtnSave)
	ON_BN_CLICKED(IDC_BTN_TOP, OnBtnTop)
	ON_BN_CLICKED(IDC_BTN_BOTTOM, OnBtnBottom)
	ON_BN_CLICKED(IDC_BTN_NEXT, OnBtnNext)
	ON_BN_CLICKED(IDC_BTN_PREV, OnBtnPrev)
	ON_BN_CLICKED(IDC_BTN_EDIT, OnBtnEdit)
	ON_BN_CLICKED(IDC_BTN_DELETE, OnBtnDelete)
	ON_BN_CLICKED(IDC_BTN_CANCEL, OnBtnCancel)
	ON_CBN_SELCHANGE(IDC_FLAG, OnSelchangeFlag)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CQuestionDlg message handlers

BOOL CQuestionDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	m_pSet=new CQuestionSet;
	m_pSet->Open();
	if(!m_pSet->IsEOF())
	{
		m_pSet->MoveFirst();
		m_strQuestionInfo=m_pSet->m_Info;
		m_strQuestion=m_pSet->m_Text;
		SetFlag(m_pSet->m_Flag);
		UpdateData(FALSE);//把相应变量的值显示在控件上

		m_SaveBtn.EnableWindow(FALSE);
		m_CancelBtn.EnableWindow(FALSE);

		m_CtrlQuestion.SetReadOnly(TRUE);
		m_CtrlInfo.SetReadOnly(TRUE);
		m_CtrlFlag.EnableWindow(FALSE);
	}
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

BOOL CQuestionDlg::DestroyWindow() 
{
	// TODO: Add your specialized code here and/or call the base class
	if(m_pSet!=NULL)
	{
		m_pSet->Close();
		delete m_pSet;
	}
	return CDialog::DestroyWindow();
}

void CQuestionDlg::OnBtnTop() 
{
	// TODO: Add your control notification handler code here
	if(!m_pSet->IsBOF())
	{
		m_pSet->MoveFirst();
		m_strQuestionInfo=m_pSet->m_Info;
		m_strQuestion=m_pSet->m_Text;
		SetFlag(m_pSet->m_Flag);
		UpdateData(FALSE);//把相应变量的值显示在控件上
	}
}

void CQuestionDlg::OnBtnBottom() 
{
	// TODO: Add your control notification handler code here
	if(!m_pSet->IsEOF())
	{
		m_pSet->MoveLast();
		m_strQuestionInfo=m_pSet->m_Info;
		m_strQuestion=m_pSet->m_Text;
		SetFlag(m_pSet->m_Flag);
		UpdateData(FALSE);//把相应变量的值显示在控件上
	}
}

void CQuestionDlg::OnBtnNext() 
{
	// TODO: Add your control notification handler code here
	if(!m_pSet->IsEOF())
	{
		m_pSet->MoveNext();
		m_strQuestionInfo=m_pSet->m_Info;
		m_strQuestion=m_pSet->m_Text;
		SetFlag(m_pSet->m_Flag);
		UpdateData(FALSE);//把相应变量的值显示在控件上
	}
	else
	{
	//	if(!m_pSet->IsBOF())
	//	{
			m_pSet->MoveLast();
	//	}
	}
}

void CQuestionDlg::OnBtnPrev() 
{
	// TODO: Add your control notification handler code here
	if(!m_pSet->IsBOF())
	{
		m_pSet->MovePrev();
		m_strQuestionInfo=m_pSet->m_Info;
		m_strQuestion=m_pSet->m_Text;
		SetFlag(m_pSet->m_Flag);
		UpdateData(FALSE);//把相应变量的值显示在控件上
	}
	else
	{
	//	if(!m_pSet->IsEOF())
	//	{
			m_pSet->MoveFirst();
	//	}
	}	
}

void CQuestionDlg::OnBtnEdit() 
{
	// TODO: Add your control notification handler code here
	m_pSet->Edit();

	m_AddBtn.EnableWindow(FALSE);
	m_EditBtn.EnableWindow(FALSE);
	m_DeleteBtn.EnableWindow(FALSE);

	m_SaveBtn.EnableWindow(TRUE);
	m_CancelBtn.EnableWindow(TRUE);

	m_CtrlQuestion.SetReadOnly(FALSE);
	m_CtrlInfo.SetReadOnly(FALSE);
	m_CtrlFlag.EnableWindow(TRUE);
}

void CQuestionDlg::OnBtnAdd() 
{
	// TODO: Add your control notification handler code here
	m_pSet->AddNew();
	m_strQuestionInfo="";
	m_strQuestion="";
	UpdateData(FALSE);//把相应变量的值显示在控件上

	m_AddBtn.EnableWindow(FALSE);
	m_EditBtn.EnableWindow(FALSE);
	m_DeleteBtn.EnableWindow(FALSE);

	m_SaveBtn.EnableWindow(TRUE);
	m_CancelBtn.EnableWindow(TRUE);

	m_CtrlQuestion.SetReadOnly(FALSE);
	m_CtrlInfo.SetReadOnly(FALSE);
	m_CtrlFlag.EnableWindow(TRUE);
}

void CQuestionDlg::OnBtnSave() 
{
	// TODO: Add your control notification handler code here
	if(m_pSet->CanUpdate())
	{
		UpdateData();//对控件对应变量的值进行刷新
		m_pSet->m_Info=m_strQuestionInfo;
		m_pSet->m_Text=m_strQuestion;
		m_pSet->m_Flag=m_nFlag;
		m_pSet->Update();
		m_pSet->Requery();	
	}

	m_AddBtn.EnableWindow(TRUE);
	m_EditBtn.EnableWindow(TRUE);
	m_DeleteBtn.EnableWindow(TRUE);

	m_SaveBtn.EnableWindow(FALSE);
	m_CancelBtn.EnableWindow(FALSE);

	m_CtrlQuestion.SetReadOnly(TRUE);
	m_CtrlInfo.SetReadOnly(TRUE);
	m_CtrlFlag.EnableWindow(FALSE);
}

void CQuestionDlg::OnBtnDelete() 
{
	// TODO: Add your control notification handler code here
	if(MessageBox("真的要删除此记录吗?","提示窗口",MB_YESNO)==IDYES)
	{
		m_pSet->Delete();
		m_pSet->Requery();
		OnBtnNext();
	}
}

void CQuestionDlg::OnBtnCancel() 
{
	// TODO: Add your control notification handler code here
	if(m_pSet->CanUpdate())
	{
		m_pSet->Cancel();
		m_pSet->Requery();
		//m_pSet->MovePrev();
	}

	m_AddBtn.EnableWindow(TRUE);
	m_EditBtn.EnableWindow(TRUE);
	m_DeleteBtn.EnableWindow(TRUE);

	m_SaveBtn.EnableWindow(FALSE);
	m_CancelBtn.EnableWindow(FALSE);

	m_CtrlQuestion.SetReadOnly(TRUE);
	m_CtrlInfo.SetReadOnly(TRUE);
	m_CtrlFlag.EnableWindow(FALSE);
}

void CQuestionDlg::OnSelchangeFlag() 
{
	// TODO: Add your control notification handler code here
	m_nFlag=m_CtrlFlag.GetCurSel();
}

void CQuestionDlg::SetFlag(int nFlag)
{
	switch(nFlag)
	{
		case 0:
			m_nFlag=0;
			m_CtrlFlag.SetWindowText("英文");
			break;
		case 1:
			m_nFlag=1;
			m_CtrlFlag.SetWindowText("中文");
			break;
		default:
			m_nFlag=0;
			m_CtrlFlag.SetWindowText("英文");
	}

}